package com.xz.spi.javassit.proxy;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * Created by FangXz on 2018/1/3.
 */
public interface CompoundKeyMap<K, P, V> {

    V get(K key, P param);

    V get(K key, P param, V defValue);

    V put(K key, P param, V value);

    V putIfAbsent(K key, P param, V value);

    Set<Map.Entry<CompoundKey<K, P>, V>> entrySet();

    Set<CompoundKey<K, P>> keys();

    Collection<V> values();

    int size();

    boolean isEmpty();

    interface CompoundKey<K, P> {

        K getKey();

        P getParam();

        int hashCode();

        boolean equals(Object obj);
    }

}
